#ifndef _NEPTUNER_SYMBOL_H_
#define _NEPTUNER_SYMBOL_H_

#include<string>
#include"Location.h"

class Scope;

class Symbol
{
public:
	enum Type
	{
		eSymbolInvalid,
		eSymbolFunction,
		eSymbolVariable,
		eSymbolDataType,
		eSymbolAttribute
	};

    std::string m_sName;
	Type		m_eSymbolType;
	Scope*		m_pxScope;
    std::string m_sTypePrefix;
    std::string m_sTypeSuffix;
	Location	m_xDefinition;

	Symbol()
	{
		m_eSymbolType = eSymbolInvalid;
		m_pxScope = NULL;
	}

	Symbol(std::string sName, Symbol::Type eType, Scope* pxScope=NULL, std::string sTypePrefix="", std::string sTypeSuffix="")
    {
        m_sName = sName;
		m_eSymbolType = eType;
        m_sTypePrefix = sTypePrefix;
        m_sTypeSuffix = sTypeSuffix;
		m_pxScope = pxScope;
    }

	bool operator < (Symbol xSymbol);
	void print();

};


#endif
